package com.oldbook.manage.auto;

import com.oldbook.common.filter.SensitiveWordFilter;
import com.oldbook.manage.domain.SensitiveWords;
import com.oldbook.manage.service.ISensitiveWordsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.List;
import java.util.stream.Collectors;

@Service
@Slf4j
/**
 * 敏感词服务类，负责敏感词过滤的初始化及检测
 *
 * <p>通过初始化方法加载敏感词库并构建过滤器，提供敏感词检测功能</p>
 */
public class SensitiveWordService {
    @Autowired
    private ISensitiveWordsService service;
    private SensitiveWordFilter filter;

    /**
     * 初始化敏感词过滤器
     *
     * <p>在Bean初始化阶段执行，从数据库获取敏感词列表并构建过滤器的核心字典结构。
     * 使用@PostConstruct确保在依赖注入完成后执行初始化操作。</p>
     */
    @PostConstruct
    public void init() {
        // 获取全量敏感词数据并转换格式
        List<SensitiveWords> wordsList = service.selectSensitiveWordsList();
        log.info("获取敏感词列表{}"+wordsList);
        List<String> actualWords = wordsList.stream()
                .map(SensitiveWords::getWord)
                .collect(Collectors.toList());
        this.filter = new SensitiveWordFilter(actualWords);
    }

    /**
     * 检测文本中是否包含敏感词
     *
     * @param text 待检测的正文内容
     * @param description 内容描述信息（当前未参与检测）
     * @param contactInfo 联系方式信息（当前未参与检测）
     * @param author 作者信息（当前未参与检测）
     * @param publisher 发布方信息（当前未参与检测）
     * @return true表示包含敏感词，false表示未包含
     */
    public boolean containsSensitiveWord(String text, String description, String contactInfo, String author, String publisher) {
        return filter.contains(text);
    }
}
